#include<stdio.h>
#include<unistd.h>
#include<pthread.h>

void * func(void * arg){
	printf("This is child thread\n");
	//设置不可取消
	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
	{
		sleep(10);
		pthread_testcancel();
	}
	//设置可以取消
	pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
	while(1){
		sleep(1);
	}
	pthread_exit("thread return");
}

int main(){
	pthread_t tid;
	void *retv;

	pthread_create(&tid, NULL, func, NULL);
	//如果不加等待时间，线程会被立即取消。因为创建线程也需要时间，相当于一个延时（sleep）
	//sleep(5);
	pthread_cancel(tid);
	pthread_join(tid, &retv);
	while(1){
		sleep(1);
	}
}
